package com.ruoyi.system.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.system.domain.TaskComment;
import com.ruoyi.system.mapper.TaskCommentMapper;
import com.ruoyi.system.service.ITaskCommentService;
import com.ruoyi.system.mapper.TaskInfoMapper;
import com.ruoyi.system.domain.TaskInfo;

/**
 * 任务评论Service业务层处理
 *
 * @author ruoyi
 * @date 2024-07-03
 */
@Service
public class TaskCommentServiceImpl implements ITaskCommentService
{
    @Autowired
    private TaskCommentMapper taskCommentMapper;

    @Autowired
    private TaskInfoMapper taskInfoMapper;

    /**
     * 查询任务评论
     *
     * @param id 任务评论主键
     * @return 任务评论
     */
    @Override
    public TaskComment selectTaskCommentById(Long id)
    {
        return taskCommentMapper.selectTaskCommentById(id);
    }

    /**
     * 查询任务评论列表
     *
     * @param taskComment 任务评论
     * @return 任务评论
     */
    @Override
    public List<TaskComment> selectTaskCommentList(TaskComment taskComment)
    {
        return taskCommentMapper.selectTaskCommentList(taskComment);
    }

    /**
     * 新增任务评论
     *
     * @param taskComment 任务评论
     * @return 结果
     */
    @Override
    @Transactional
    public int insertTaskComment(TaskComment taskComment)
    {
        int rows = taskCommentMapper.insertTaskComment(taskComment);
        if (rows > 0) {
            // 评论数加一
            TaskInfo taskInfo = taskInfoMapper.selectTaskInfoById(taskComment.getTaskId());
            if (taskInfo != null) {
                taskInfo.setCommentCount(taskInfo.getCommentCount() == null ? 1 : taskInfo.getCommentCount() + 1);
                taskInfoMapper.updateTaskInfo(taskInfo);
            }
        }
        return rows;
    }

    /**
     * 修改任务评论
     *
     * @param taskComment 任务评论
     * @return 结果
     */
    @Override
    public int updateTaskComment(TaskComment taskComment)
    {
        return taskCommentMapper.updateTaskComment(taskComment);
    }

    /**
     * 批量删除任务评论
     *
     * @param ids 需要删除的任务评论主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteTaskCommentByIds(Long[] ids)
    {
        int rows = taskCommentMapper.deleteTaskCommentByIds(ids);
        if (rows > 0) {
            // 评论数减一 (这里简化处理，如果需要精确，需要遍历被删除的评论，获取taskId，并更新对应任务的评论数)
            // 目前只假设是单条删除或批量删除相同任务的评论，实际应用中可能需要更复杂的逻辑来处理评论计数同步
            // 可以在此处添加逻辑：根据ids查询评论的taskId，然后更新对应任务的commentCount
        }
        return rows;
    }

    /**
     * 删除任务评论信息
     *
     * @param id 任务评论主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteTaskCommentById(Long id)
    {
        TaskComment comment = taskCommentMapper.selectTaskCommentById(id);
        if (comment != null) {
            int rows = taskCommentMapper.deleteTaskCommentById(id);
            if (rows > 0) {
                // 评论数减一
                TaskInfo taskInfo = taskInfoMapper.selectTaskInfoById(comment.getTaskId());
                if (taskInfo != null && taskInfo.getCommentCount() != null) {
                    taskInfo.setCommentCount(taskInfo.getCommentCount() - 1);
                    taskInfoMapper.updateTaskInfo(taskInfo);
                }
            }
            return rows;
        }
        return 0;
    }

    /**
     * 根据任务ID统计评论数量
     *
     * @param taskId 任务ID
     * @return 评论数量
     */
    @Override
    public int countTaskCommentsByTaskId(Long taskId) {
        return taskCommentMapper.countTaskCommentsByTaskId(taskId);
    }
}